﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using vudu.Presentacion.Contrato.VU_09_Gestionar_Carga_de_Archivos_PDF;
using vudu.Logica.Fachada;
using vudu.ClasesDominio;
using System.Data;
using System.IO;
using System.Web.UI.HtmlControls;


namespace vudu.Presentacion.Presentador.VU_09_Gestionar_Carga_de_Archivos_PDF
{
    public class PresentadorAgregarArchivoPdf
    {
        #region Atributos
        private IContratoAgregarArchivoPdf _vista;
        private EnlaceLogico _fachada;
        private Profesor _miProfesor;
        private Estudiante _miEstudiante;
        private List<SeccionMateria> _misSecciones;
        public List<Materia> _misMaterias;
        private List<Universidad> _misUniversidades;
        private List<Escuela> _misEscuelas;
        private List<Categoria> _misCategorias;
        private int _resultado;
        private string _rutaArchivosPdf;
        #endregion


        #region Constructor
        public PresentadorAgregarArchivoPdf(IContratoAgregarArchivoPdf vista)
        {
            _vista = vista;   
            _fachada = (EnlaceLogico)_vista.Sesion["Fachada"];
            _rutaArchivosPdf = System.Configuration.ConfigurationManager.AppSettings["rutaArchivosPdf"];

        }
        #endregion


        #region Metodos Presentador

        public void CargarInformacionPagina()
        {
            //cargar info profesor
            _miProfesor = (Profesor)_fachada.RolActual;
            _vista.LabelNombreUsuario.Text = "Profesor(a): " + _miProfesor.Nombre + " " + _miProfesor.Apellido;
        //    _vista.LabelMiga.Text = " <a class=\"miga\" href=\"../HomePages/HomeProfesor.aspx\">Inicio </a> &gt; <a class=\"migaActual\"> Consultar Archivo </a>";
            _misCategorias = _fachada.ConsultarAllCategorias();
            foreach (Categoria categoria in _misCategorias)
            {
                // Creamos un nuevo registro para DropDownList1
                ListItem registroLista = new ListItem();
                if (!categoria.Nombre.Trim().Equals(""))
                {
                    registroLista.Text = categoria.Nombre;
                    registroLista.Value = categoria.Nombre;
                }
                _vista.ComboBoxCategoria.Items.Add(registroLista);

            }
            ValidarCarpeta();
        }

        public void ValidarCarpeta()
        {
            Profesor miProfesor = (Profesor)_fachada.RolActual;
            SeccionMateria seccion = (SeccionMateria)_vista.Sesion["SeccionMateriaPdf"];
            Materia materia = (Materia)_vista.Sesion["MateriaPdf"];
            String ruta = _rutaArchivosPdf + miProfesor.Cedula.ToString() + miProfesor.Nombre + miProfesor.Apellido + materia.Nombre.ToString() + seccion.Codigo.ToString() + "/";
            DirectoryInfo prueba = new DirectoryInfo(HttpContext.Current.Server.MapPath(ruta));
            if (!prueba.Exists)
            {
                DirectoryInfo hola = new DirectoryInfo(HttpContext.Current.Server.MapPath(_rutaArchivosPdf));
                string path2 = miProfesor.Cedula.ToString() + miProfesor.Nombre + miProfesor.Apellido + materia.Nombre.ToString() + seccion.Codigo.ToString();
                hola.CreateSubdirectory(path2);
            }

        }

        public void Button1_Click()
        {
            Profesor miProfesor = (Profesor)_fachada.RolActual;
            SeccionMateria seccion = (SeccionMateria)_vista.Sesion["SeccionMateriaPdf"];
            Materia materia = (Materia)_vista.Sesion["MateriaPdf"];
            _vista.LabelTransaccionFallida.Visible = false;

            //Se valida que los campos seleccionados contengan un valor correcto
            if ((_vista.ComboBoxCategoria.SelectedValue == "0"))
            {
                _vista.LabelTransaccionFallida.CssClass = "transaccionFallida";
                _vista.LabelTransaccionFallida.Text = "Debe seleccionar una categoría.";
                _vista.LabelTransaccionFallida.Visible = true;
                _vista.LabelCategoria.ForeColor = System.Drawing.Color.Red;
            }
            else
            {
                if ((!_vista.CargarArchivo.HasFile))
                {
                    _vista.LabelTransaccionFallida.CssClass = "transaccionFallida";
                    _vista.LabelTransaccionFallida.Text = "Debe seleccionar un archivo.";
                    _vista.LabelTransaccionFallida.Visible = true;
                    _vista.LabelArchivo.ForeColor = System.Drawing.Color.Red;
                }
                else
                {
                    _vista.LabelTransaccionFallida.Visible = false;
                    _vista.LabelCategoria.ForeColor = System.Drawing.Color.Black;
                    _vista.LabelArchivo.ForeColor = System.Drawing.Color.Black;

                    string fileName = HttpContext.Current.Server.HtmlEncode(_vista.CargarArchivo.FileName);
                    float tamañoArchivo = ((_vista.CargarArchivo.PostedFile.ContentLength) / 1024);
                    float tamañoComparar = tamañoArchivo + seccion.EspacioUtlizado;
                    // Se valida el limite de carga de archivo que puede subir un profesor en su cuenta
                    if (tamañoComparar <= seccion.EspacioMaxCarga)
                    {

                        // Se obtiene la extension del archivo para saber si es de tipo Pdf
                        string extension = System.IO.Path.GetExtension(fileName);

                        // Se valida que el Archivo sea de tipo PDF
                        if (extension == ".pdf")
                        {

                            String path = _rutaArchivosPdf + miProfesor.Cedula.ToString() + miProfesor.Nombre + miProfesor.Apellido + materia.Nombre.ToString() + seccion.Codigo.ToString() + "/";
                            FileInfo prueba = new FileInfo(HttpContext.Current.Server.MapPath(path + _vista.CargarArchivo.FileName.ToString()));
                            // Se valida que el Archivo a subir no tenga el mismo nombre de otro Archivo ya subido
                            if (!prueba.Exists)
                            {
                                //Se guarda el Archivo.pdf en la carpeta Archivo que se encuentra dentro de la carpeta /src/vudu/

                                _vista.CargarArchivo.SaveAs(HttpContext.Current.Server.MapPath(path + _vista.CargarArchivo.FileName.ToString()));
                                seccion.EspacioUtlizado = tamañoComparar;
                                OperacionesPdf archivoPdf = new OperacionesPdf();
                                archivoPdf.nombreArchivo = _vista.CargarArchivo.FileName.ToString();
                                archivoPdf.categoria = buscarCategoria();
                                archivoPdf.rutaArchivoPdf = new FileInfo(path);

                                //Response.Redirect("ArchivoPdf.aspx");

                                if (_fachada.InsertarArchivoPdf(archivoPdf, tamañoArchivo, miProfesor.Crn, seccion.IdSeccionMateria))
                                {
                                    _vista.LabelTransaccionFallida.CssClass = "transaccionExitosa";
                                    _vista.LabelTransaccionFallida.Text = "Operacion Exitosa: Archivo Cargado.";
                                    _vista.LabelTransaccionFallida.Visible = true;
                                }
                                        
                            }
                            else
                            {
                                _vista.LabelTransaccionFallida.CssClass = "transaccionFallida";
                                _vista.LabelTransaccionFallida.Text = "Ya existe un Archivo igual en su cuenta.";
                                _vista.LabelTransaccionFallida.Visible = true;
                                _vista.LabelArchivo.ForeColor = System.Drawing.Color.Red;
                            }

                        }
                        else
                        {
                            _vista.LabelTransaccionFallida.CssClass = "transaccionFallida";
                            _vista.LabelTransaccionFallida.Text = "Error El Archivo a subir debe ser de tipo PDF ";
                            _vista.LabelTransaccionFallida.Visible = true;
                            _vista.LabelArchivo.ForeColor = System.Drawing.Color.Red;
                        }

                    }
                    else
                    {
                        _vista.LabelTransaccionFallida.CssClass = "transaccionFallida";
                        _vista.LabelTransaccionFallida.Text = "No tiene espacio para almacenar más archivos. ";
                        _vista.LabelTransaccionFallida.Visible = true;
                    }
                }
      
            }
        }


        public Categoria buscarCategoria()
        {
            Categoria CategoriaResp=new Categoria();
            _misCategorias = _fachada.ConsultarAllCategorias();
            foreach (Categoria categoria in _misCategorias)
            {

                if (categoria.Nombre.Trim().Equals(_vista.ComboBoxCategoria.SelectedValue.Trim().ToString()))
                {
                    CategoriaResp= categoria;
                    break;
                }
            }
            return CategoriaResp;
        }

        public void ComboBoxCategoria_SelectedIndexChanged()
       {
           _vista.LabelTransaccionFallida.Visible = false;
           _vista.LabelCategoria.ForeColor = System.Drawing.Color.Black;
       }
        
        #endregion
    }
}